import { useAdminStore } from '@/store/admin';
import axios from 'axios';

// 创建axios实例，可配置基础的请求相关属性
const service = axios.create();

// 请求拦截器
service.interceptors.request.use(
    (config) => {
        const adminStore = useAdminStore();
        // 设置基础请求头
        if (!config.headers['Content-Type']) {
            config.headers['Content-Type'] = 'application/json;charset=UTF-8';
        }
        // 添加鉴权令牌
        if (adminStore.token) {
            config.headers.Authorization = `Bearer ${adminStore.token}`;
        }

        return config;
    },
    (error) => Promise.reject(error)
);

// 响应拦截器
service.interceptors.response.use(
    (response) => {
        const { data } = response;
        const adminStore = useAdminStore();
        // 处理业务成功状态
        if (data.code === 200) {
            return data;
        }

        // 处理业务错误
        const errorMessage = data.message || '请求处理失败';

        // 特殊状态码处理
        switch (data.code) {
            case 401:
                adminStore.clearToken();
                if (typeof window !== 'undefined') {
                    window.location.href = '/login';
                }
                break;
            case 403:
                console.warn('权限不足，请联系管理员');
                break;
            case 500:
                console.error('服务器内部错误');
                break;
            default:
                console.error(`业务错误 [${data.code}]: ${errorMessage}`);
        }

        return Promise.reject(new Error(errorMessage));
    },
    (error) => {
        const adminStore = useAdminStore();
        // 处理网络错误
        if (error.code === 'ECONNABORTED') {
            console.error('请求超时');
            return Promise.reject(new Error('请求超时，请检查网络连接'));
        }

        // 处理HTTP错误状态
        if (error.response) {
            const { status } = error.response;
            const errorMessage = error.response.data?.message || error.message;

            if (status === 401) {
                console.log(status + ': ' + errorMessage);
                adminStore.clearToken();
                if (typeof window !== 'undefined') {
                    window.location.href = '/backend/login';
                }
            }

            console.error(`HTTP错误 [${status}]: ${errorMessage}`);
            return Promise.reject(new Error(errorMessage));
        }

        console.error('网络连接异常');
        return Promise.reject(new Error('网络连接异常，请检查网络设置'));
    }
);

export default service;
